package org.mii.safeguard_v1.base.jdbc;

import java.util.List;

/**
 * 基本的数据库操作定义接口，该接口适用于定义采用spring jdbc实现的dao层
 * 
 * @author QUANXIWEI
 * 
 */
public interface BaseJdbcDao {

	/**
	 * 根据sql查询，查询数据库，返回list类型的结果集
	 * 
	 * @param <T>:查询数据的实体泛型
	 * @param sql：sql语句
	 * @param clazz：实体泛型对应的类
	 * @param obj：查询条件，同实体类型
	 * @return 结果集合 List<T>
	 */
	public <T> List<T> query(String sql, Class<T> clazz, T obj);

	/**
	 * 根据sql语句，查询数据库，返回唯一的实体类型
	 * 
	 * @param <T>:查询数据的实体泛型
	 * @param sql:sql语句
	 * @param clazz:实体泛型对应的类
	 * @param obj:查询条件，同实体类型
	 * @return 唯一的结果实体
	 * @throws JdbcDaoException
	 *             如果查询结果不唯一，将抛该异常给invoker
	 */
	public <T> T queryUnique(String sql, Class<T> clazz, T obj)
			throws JdbcDaoException;

	/**
	 * 更新数据库，返回受影响的行数
	 * 
	 * @param <T>:更新的实体泛型
	 * @param sql:sql更新语句，包括insert和update等
	 * @param obj:更新参数T
	 * @return 受影响的行数
	 */
	public <T> int update(String sql, T obj);

	/**
	 * 批量更新数据库，返回每次更新的影响行数数组
	 * 
	 * @param <T>:更新的实体泛型
	 * @param sql:sql更新语句，包括insert和update等
	 * @param objs:更新参数List
	 * @return 每次更新的影响行数数组
	 */
	public <T> int[] batchUpdate(String sql, List<T> objs);

}
